#ifndef TBRRENDERER_H
#define TBRRENDERER_H
#include <vector>
#include "TBRvector.h"
#include "TBRlight.h"
#include "TBRscene.h"
#include "TBRcamera.h"

#include "TBRshader.h"
#include "TBReffect.h"

#include "TBRcolor.h"




//using namespace TBR;

typedef std::vector<TBR::Light> LightList;
typedef std::vector<TBR::Camera> CameraList;



namespace TBR
{
	class Renderer
	{
	public:
		void setWindowSize(int w, int h);

		void setLight(LightList &);
		void setCamera(TBR::Camera *);
		void setSceneManager(TBR::SceneManager *);

		//pipeline configuration
		void setVS(TBR::Shader &);
		void setGS(TBR::Shader &);
		void setPS(TBR::Shader &);

		//virtual ~Renderer() = 0;
		virtual void setWindowID(int id) = 0;
		virtual bool initialize() = 0;
		virtual bool reInitialize() = 0;
		virtual bool unInitialize() = 0;

		//virtual void setEffect(TBR::Effect &);

		virtual void draw() = 0;
		virtual void drawScene() = 0;

		//buffer 
		virtual void clearBuffers() = 0;


		//render target
		virtual bool bindRenderTarget() = 0;

	protected:
		TBR::Camera *_camera;
		TBR::SceneManager *_sceneManager;

		TBR::Effect _effect;
		TBR::Shader _vsh, _gsh, _psh;

		int _w, _h;
		//LightList _Llist;
		//CameraList _Clist;



	};



}









#endif